import { login } from '@/api/user'
import { delToken, getToken, setToken } from '@/utils/storage'

export default {
  // 开启命名空间
  namespaced: true,
  state: {
    // 由于 Vuex 的数据存储在内存中，刷新就没了，所以要从本地存储中获取初始值
    // 逻辑或表达式：如果左侧有值，就返回左侧的值，否则，返回右侧的值
    token: getToken() || ''
  },
  mutations: {
    setToken (state, newToken) {
      // 更新 state
      state.token = newToken
      // 在更新 state 的同时，需要存储到本地，防止刷新后丢失

      if (!newToken) {
        delToken()
      } else {
        setToken(newToken)
      }

      // newToken ? setToken(newToken) : delToken()

      return 456
    }
  },
  actions: {
    async login (context, { username, password }) {
      const res = await login({ username, password })
      const mutationReturnValue = context.commit('setToken', res.data.token)
      // 注意，mutation函数的返回值，不会传递给 commit 函数
      console.log(mutationReturnValue, 'mutationReturnValue')
      // action 函数的返回值，会传递给 dispatch 函数，作为 dispatch 函数的返回值
      return res
    }
  }
}
